/*
 *                          许可协议    
 *    
 *  COPYRIGHT ©2009 The Siox software project Lab.
 * 
 * 版权声明:                               
 *  1.任何"派生软件"都必须包含此许可协议,"派生软件的开发者"必   
 *  须完全保留被继承"软件"的许可协议和"版权信息".          
 *  2."派生软件开发者"在别人使用他所"派生"的"软件"时,自动成为"开
 *  发者".                               
 *  3."使用者"所生成的二进制代码文件须包含"原始开发者"的版权信息. 
 *  4.如该软件并未得到"开发者"的开源，那么"使用者"对本程序仅有使  
 *  用权，并不得进行反向工程.                      
 *  5.本协议保留"原始开发者"的版权信息在许可协议文本之内.
 *  6.本文档作为源代码/程序的基本协议,如有变化作为本协议扩充 
 *                                     
 * 免责声明:                               
 *  1.使用本"软件"都意味"使用者"是自愿使用本"软件",接受此许可协 
 *  议的所有条款.如果"使用者"不同意此许可协议就不能使用本"软件".  
 *  2.本"软件"虽然在开发者的开发环境下经过严格测试,但不能排除    
 *  "软件"中仍然存在错误.由于使用本"软件"所造成的任何损失,"开发  
 *  者"不负任何责任!                          
 *  3.本"软件"在被"使用"过程中,由"使用者"发现的任何错误必须再反 
 *  馈给"开发者"并经过"开发者"同意后,才可对其他人公开.任何未经过  
 *  "开发者"同意而被使用者擅自公开的本"软件"的错误,"开发者"有权  
 *  要求其对"开发者"名誉损失负法律责任. 
 * 
 *  个人主页:http://hi.baidu.com/lindily
 *  电子信箱:lindily@126.com               
 */

package cn.siox.util.database;
import com.db4o.*;
import com.db4o.query.Query;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
 * @类名 DictOperater
 * @作者 Lindily
 * @日期 2009-6-19 2:17:44
 */
public class DictOperator {
    ObjectContainer dictDB = Db4o.openFile("./data/" + "dict" + ".db");
    StringBuffer ret = new StringBuffer("");
    int count;
    public String dictQuery(String keyword) {
                DictDDL dict = new DictDDL();
                Query keywordquery = dictDB.query();
                keywordquery.constrain(DictDDL.class);
                Query explanationquery = keywordquery.descend("explanation");
                keywordquery.descend("word").constrain(keyword).like().or((explanationquery.constrain(keyword)).like());
                ObjectSet result = keywordquery.execute();
                System.out.println("result size: " + result.size());
                count = result.size();
                while (result.hasNext()) {
                    dict = (DictDDL) (result.next());
                    System.out.print(dict.getEntry() + "  ");
                    System.out.println(dict.getWord());
//                    System.out.println(dict.getPhonetic());
//                    System.out.println(dict.getExplanation());
//                    System.out.println(dict.getLevel());
                    ret.append(dict.getWord() + "\r\n" + "  [" + dict.getPhonetic() + "]" + "  " + dict.getExplanation() + "\r\n" + "  词典分类：" + dict.getLevel() + "\r\n");
                }

        dictDB.close();
        return ret.toString();
    }
    //将词典从mysql数据库中倒入到db4o中
    public String dictChange() {
                try {
                    new com.mysql.jdbc.Driver();
                    String url = "jdbc:mysql://localhost:3306/siox_english";
                    java.sql.Connection conn = DriverManager.getConnection(url, "root", "111111");
                    java.sql.Statement stmt = conn.createStatement();
                    ResultSet rs = stmt.executeQuery("select * from english_vocabulary");
                    while (rs.next()) {
                        DictDDL dict = new DictDDL();
                        dict.setEntry(rs.getInt("entry"));
                        dict.setWord(rs.getString("word"));
                        dict.setPhonetic(rs.getString("phonetic"));
                        dict.setExplanation(rs.getString("explanation"));
                        dict.setLevel(rs.getString("level"));
                        dictDB.store(dict);
                    }
                    dictDB.commit();

                    ObjectSet os = dictDB.queryByExample(new DictDDL());
                    int i = 0;
                    while (os.hasNext()) {
                        DictDDL eng = new DictDDL();
                        eng = (DictDDL) os.next();
                        System.out.println(eng.getEntry() + " " + eng.getWord() + " " + eng.getPhonetic() + " " + eng.getExplanation() + " " + eng.getLevel());
                        i++;
                    }
                    System.out.println("===============================>tatal: " + i);
                    rs.close();
                    stmt.close();
                    conn.close();
                } catch (SQLException e) {
                    System.out.println("数据库出错!");
                }
                ret.append("倒入数据库成功！");


        dictDB.close();
        return ret.toString();
    }

    public int getCount() {
        return this.count;
    }
}
